約 5,705,650 件
https://w.atwiki.jp/civilization/pages/2385.html
初心者ガイド/チュートリアル詳説/03.戦闘 前ページ次ページ初心者ガイド/チュートリアル詳説 初心者ガイド/チュートリアル詳説/03.戦闘 [#h94786b9] 戦闘 [#qcd654ec] 都市の防備 [#vebff992] 戦闘 原文 訳 There appears to be a marauding Lion unit on the outskirts of Rome. Wild animals and barbarians will often attack defensless units, such as Settler units and Worker units. ローマの町はずれでは、ライオンのユニットがうろついている様子です。開拓者や労働者などの無防備なユニットは、よく野生動物や蛮族に襲われます。 Take an aggressive stance in defending your cities and move your Warrior unit east towards the Lion. 都市を守るためにも積極的に攻撃に出て、戦士ユニットをライオンがいる東に移動させましょう。 Your Warrior unit moved as far as he can in one turn. 戦士ユニットは、1ターンで可能な限りの移動を完了しました。 Pointing the mouse at a unit will display its statistics in the bottom left corner. The number next to the symbol shows how many squares the unit can move per turn. マウスでユニットをポイントすると、左下に詳しいデータが表示されます。 の横の数字は、1ターンでユニットが移動できるスクエア数を示しています。 Since your Warrior unit has gone as far as it can go, end your turn. 戦士ユニットは、すでに1ターンで可能な限りの移動を完了しました。ターンを終了してください。 The time for battle is upon us! To attack the Lion unit, move your Warrior unit into the Lion s square. さあ、いよいよ戦いです! ライオンのユニットを攻撃するために、戦士ユニットをライオンのスクエアに移動させてください。 Notice the Lion and your Warrior both have the Combat Strength of 2. If you point your mouse cursor at a unit and look at the popup help, the unit s Combat Strength is indicated by a symbol. ライオンと戦士のいずれも、戦闘力が2であることに注目してください。カーソルをユニットに当ててポップアップヘルプを見ると、ユニットの戦闘力が、 の横に表示されています。 Combat Strength tells you how strong your unit is compared to other Units. 戦闘力により、他のユニットと自分のユニットの強さが比較できます。 Attack the Lion unit. ライオンのユニットを攻撃しましょう。 You have beaten the Lion unit! Great job! ライオンのユニットを倒しました! お見事! Move your Warrior back to your city, to defend it. 戦士を都市に戻して、守りを固めましょう。 都市の防備 原文 訳 Move your Warrior back to your city, to defend it. 戦士を都市に戻して、守りを固めましょう。 If an enemy unit moves into an unprotected City, they automatically capture it. When a player loses all of their Cities, they lose the game. 無防備な都市は、敵のユニットに侵入されると、自動的に占領されてしまいます。全部の都市を失うと、その時点でゲームの負けが確定します。 The Fortify order tells your unit to stay where it is and repel all attacks. The unit will remain fortified until you give it new orders. 守りを固める命令を受けると、ユニットはその場から動かずにすべての攻撃を撃退します。この態勢は、ユニットが次の命令を受けるまで継続します。 A Fortified unit gains a 5 defensive bonus for each turn it remains fortified to a maximum of 25 after 5 turns. 守りを固めているユニットは、1ターンごとに防御ボーナス5を獲得します。この態勢をとり続けると、ボーナスは、5ターン後の最大25まで加算されます。 Activate your Warrior unit located in Rome, and click the Fortify Button. ローマにいる戦士ユニットを選択して、〈守りを固める〉ボタンを押してください。 Please end your turn. ターンを終了してください。
https://w.atwiki.jp/karamushi0311/pages/35.html
ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力-リスト ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力ここに文字を入力-リスト
https://w.atwiki.jp/vipdeatlantica/pages/35.html
https://w.atwiki.jp/tonyuwiki226/pages/16.html
まだ、ソフト本体を持ってない人はここにアクセスしてダウンロードしてきてください。 基礎編 ↑基礎から学びたい人はこちらから 実践編 ↑いきなり作りたい方は、こちらを
https://w.atwiki.jp/akasatanahama/pages/106.html
概要 MOD製作チュートリアル/TileEntityの追加で追加したTileEntityにGUI(Graphical User Interface)を実装する。 動作確認済バージョン:1.7.10-10.13.4.1558 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; @Instance(MODID) public static AluminiumMod instance; public static Block chestAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { chestAluminium = new BlockAluminiumChest() .setBlockName("chestAluminium") .setBlockTextureName("aluminiummod Aluminium_Chest"); GameRegistry.registerBlock(chestAluminium, "chestAluminium"); GameRegistry.registerTileEntity(TileEntityAluminiumChest.class, "TileEntityAluminiumChest"); NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new AluminiumModGuiHandler()); } } BlockAluminiumChest.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BlockAluminiumChest extends Block implements ITileEntityProvider { private Random random = new Random(); public BlockAluminiumChest() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabDecorations); this.setHardness(5.0F); this.setResistance(1.0F); this.setStepSound(soundTypeMetal); isBlockContainer = true; } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityAluminiumChest(); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く。 player.openGui(AluminiumMod.instance, 1, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityAluminiumChest tileentity = (TileEntityAluminiumChest) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem() .setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } } TileEntityAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityAluminiumChest extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } } @Override public int getSizeInventory() { return 54; } @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } @Override public boolean hasCustomInventoryName() { return false; } @Override public String getInventoryName() { return "container.AluminiumMod.AluminiumChest"; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return true; } } AluminiumModGuiHandler.java package tutorial.aluminiummod; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class AluminiumModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new ContainerAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new GuiAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } } ContainerAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerAluminiumChest extends Container { private TileEntityAluminiumChest tileEntity; /** アルミニウムチェストのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEntity) { // スロットを設定する。 this.tileEntity = tileEntity; for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // アルミニウムチェストのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { // プレイヤーのインベントリならアルミニウムチェストのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index0, index1, false)) { return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiAluminiumChest.java package tutorial.aluminiummod; import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiAluminiumChest extends GuiContainer { private TileEntityAluminiumChest tileEntity; // GUIのテクスチャの場所を指定する。今回はバニラのラージチェストと同じものを使う。 private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEnttiy) { super(new ContainerAluminiumChest(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } 解説 Instance String modid コアクラスのインスタンスにつけるアノテーション。 登録やインスタンスの生成・代入はForge側がやってくれるので何もしなくてよい。 NetworkRegistry GUIやパケットなどを管理するenum。 void registerGuiHandler(Object mod, IGuiHandler handler) MODのコアクラスのインスタンスと、それに対応したGuiHandlerを登録する処理。 EntityPlayer プレイヤーのEntity継承クラス。 void openGui(Object mod, int modGuiId, World world, int x, int y, int z) 第一引数はコアクラスのインスタンス、第二引数はMOD内でのGUIのID。 プレイヤーにGUIを開かせる。 IGuiHandler GuiHandlerのためのインターフェース。 Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) サーバー側で呼ばれる。 基本的にはIDに対応したContainerを返す。 Worldのインスタンスと座標も引数に含まれているので、TileEntityを取得して判別してもよい。 Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) クライアント側で呼ばれる。 基本的にはIDに対応したGuiを返す。 Container Slot addSlotToContainer(Slot slot) 新たなSlotをコンテナに登録する処理。 boolean canInteractWith(EntityPlayer player) プレイヤーがコンテナを使えるかどうかの判定。 ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) スロットがShift+クリックされた時の処理。 クリックされたスロットの中身を移動する。 boolean mergeItemStack(ItemStack itemStack, int beginIndex, int endIndex, boolean doReverse) 引数のItemStackを指定された範囲内の空のスロットに移動する。 範囲は、beginIndexを含み、endIndexは含まない。 doReverseがtrueの場合は、検索方向がend→beginになる。 GuiContainer コンテナを持つGUIのクラス。 クライアントのみで使用される。 public GuiContainer(Container container) 引数は対応するコンテナ。 void drawGuiContainerForegroundLayer(int mouseX, int mouseY) Guiの前面レイヤーを描画する処理。 文字の描画などをする。 void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) Guiの背景レイヤーを描画する処理。 Guiのテクスチャの描画などをする。 ResourceLocation リソースの場所を保持するクラス。 public ResourceLocation(String path) コンストラクタ。 引数でリソースの場所を指定する。 "modid textures/..."というように、すべて小文字にしたMODIDと、textures以下のファイルのパスを指定する。 例えば、assets/aluminiummod/textures/gui/gui.pngだとすると、private static final ResourceLocation GUITEXTURE = new ResourceLocation("aluminiummod textures/gui/gui.png");と記述する。 なお、GUIのテクスチャは画像ファイルを正方形にしないと縦横比がおかしくなる可能性があるので、カンバスサイズを256x256や512x512などにしておいて、余白を透明で残しておくと良い。 使用例 オファレンプレゼントボックスを追加している部分。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /** * @author Akasata Nahama */ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String MCVERSION = "1.7.10"; public static final String OMVERSION = "1.1.0"; public static final String VERSION = "[" + MCVERSION + "]" + OMVERSION; /** coreクラスのインスタンス */ @Instance(MODID) public static OfalenModCore instance; /*略*/ /** 初期化前処理。 */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ OfalenModBlockCore.registerBlock(); // 機械類のGUIを登録する。 NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new OfalenModGuiHandler()); /*略*/ } /*略*/ } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { /*略*/ public static Block boxPresentOfalen; /** ブロックを登録する処理。 */ public static void registerBlock() { /*略*/ boxPresentOfalen = new BlockPresentBox() .setBlockName("boxPresentOfalen") .setBlockTextureName("ofalenmod present_box"); GameRegistry.registerBlock(boxPresentOfalen, "boxPresentOfalen"); GameRegistry.registerTileEntity(TileEntityPresentBox.class, "TileEntityOfalenPresentBox"); } } BlockPresentBox.java package nahama.ofalenmod.block; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockPresentBox extends Block implements ITileEntityProvider { private Random random = new Random(); /** 0 下,1 上,2 横,3 クリスマス下,4;クリスマス上,5 クリスマス横 */ private IIcon[] iicon = new IIcon[6]; public BlockPresentBox() { super(Material.sponge); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(1.0F); this.setResistance(1.0F); this.setStepSound(Block.soundTypeCloth); } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPresentBox(); } /** プレイヤーに右クリックされたときの処理。 */ @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く player.openGui(OfalenModCore.instance, 1, world, x, y, z); return true; } /** ブロックが破壊された時の処理。 */ @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityPresentBox tileentity = (TileEntityPresentBox) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem().setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } /** ブロックのアイコンを登録する処理。 */ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { for (int i = 0; i 6; i++) { iicon[i] = register.registerIcon(this.getTextureName() + "-" + i); } } /** ブロックのアイコンを返す。 */ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { int i = 2; if (side == 0) i = 0; if (side == 1) i = 1; if (OfalenModAnniversaryHandler.isChristmas) i += 3; return iicon[i]; } } TileEntityPresentBox.java package nahama.ofalenmod.tileentity; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityPresentBox extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; protected String owner; /** プレイヤーがインベントリを開けた時の処理。 */ public void openInventory(EntityPlayer player) { if (owner != null || worldObj.isRemote) return; // オーナーに設定し、中身を上書きする。 owner = player.getCommandSenderName(); ItemStack[] presents = OfalenModAnniversaryHandler.getPresents(player); if (presents == null) return; itemStacks = presents; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); nbt.setString("Owner", owner); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } owner = nbt.getString("Owner"); } /** インベントリのスロット数を返す。 */ @Override public int getSizeInventory() { return 54; } /** スロットのアイテムを返す。 */ @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } /** スロットのスタック数を減らす。 */ @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } /** スロットの中身を設定する。 */ @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } /** 金床で設定された名前を持つかどうか。 */ @Override public boolean hasCustomInventoryName() { return false; } /** インベントリの名前を返す。 */ @Override public String getInventoryName() { return "container.OfalenMod.PresentBox"; } /** このインベントリの最大スタック数を返す。 */ @Override public int getInventoryStackLimit() { return 64; } /** プレイヤーが使用できるかどうか。 */ @Override public boolean isUseableByPlayer(EntityPlayer player) { if (owner != null !player.getCommandSenderName().equals(owner)) return false; return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} /** スロットにアクセスできるかどうか。 */ @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return false; } } OfalenModGuiHandler.java package nahama.ofalenmod.handler; /*略*/ public class OfalenModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new ContainerItemShield(player); if (id == 3) return new ContainerItemTeleporter(player); if (id == 4) return new ContainerItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new ContainerSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new ContainerRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new ContainerConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new ContainerTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new ContainerPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new GuiItemShield(player); if (id == 3) return new GuiItemTeleporter(player); if (id == 4) return new GuiItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new GuiSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new GuiRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new GuiConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new GuiTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new GuiPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } } ContainerPresentBox.java package nahama.ofalenmod.inventory; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerPresentBox extends Container { private TileEntityPresentBox tileEntity; /** プレゼントボックスのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerPresentBox(EntityPlayer player, TileEntityPresentBox tileEntity) { this.tileEntity = tileEntity; tileEntity.openInventory(player); for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // プレゼントボックスのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { if (index1 = slotNumber slotNumber index2) { // プレイヤーのインベントリならクイックスロットに移動。 if (!this.mergeItemStack(itemStack1, index2, index3, false)) { return null; } } else if (index2 = slotNumber slotNumber index3 !this.mergeItemStack(itemStack1, index1, index2, false)) { // クイックスロットからプレイヤーのインベントリに移動できなかったら終了。 return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiPresentBox.java package nahama.ofalenmod.gui; import org.lwjgl.opengl.GL11; import nahama.ofalenmod.inventory.ContainerPresentBox; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiPresentBox extends GuiContainer { private TileEntityPresentBox tileEntity; private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiPresentBox(EntityPlayer player, TileEntityPresentBox tileEnttiy) { super(new ContainerPresentBox(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int par1, int par2) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } コメント この項目に関する質問などをどうぞ。 GUIのテクスチャをオリジナルのものにする場合どう記述すれば、よいのでしょうか? - 新人もっだー 2015-12-20 12 20 13 解説/public ResourceLocation(String path)に追記しましたのでご確認ください。自分で指定したパスにバニラのラージチェストのテクスチャを改変したものを保存すればできます。 - Tom Kate 2015-12-21 16 52 24 コピペでもコンストラクター ContainerAluminiumChest(EntityPlayer, TileEntityChest) は未定義ですとなります。 - 新人もっだー 2015-12-26 11 26 55 それは、Eclipse上でコンパイルエラーの検出がされたということでしょうか?どの行でのエラーかを教えていただけないでしょうか。 - 赤砂蛇凪浜 2015-12-26 13 48 01 ContainerAluminiumChestのreturn new ContainerChest(player, (TileEntityChest) tileentity);no - 新人もっだー 2015-12-28 08 51 55 の行です - 新人もっだー 2015-12-28 08 52 37 このチュートリアルの中に該当する行がありません。一度コピー ペーストしなおしてみてください。 - 赤砂蛇凪浜 2015-12-28 09 36 26 import cpw.mods.fml.common.Mod.Instance;が書き込んでから保存するとなぜかそれだけ消えてしまうのですが、なんで何でしょうか? - san 2016-09-11 08 20 49 IDE(Eclipse)のimport文自動編集が消しているのだと思われます。@Instanceの部分にエラーが出ていなければ特に問題はないと思います。 - 赤砂蛇凪浜 2016-09-16 07 35 27 醸造台やエンチャント台、装備スロットのように、スロット内に一部のアイテムのみ入れられるようにするにはどうすれば良いのでしょうか? - 名無しさん 2016-12-02 01 33 32 addSlotToContainerでSlotを継承した自作のクラスを渡せばよいです。その際、isItemValidをオーバーライドすれば入れられるアイテムを、canTakeStackをオーバーライドすれば取り出せるアイテムを制御できます。分かりにくかったらすみません。後ほど本文への掲載も検討します。 - 赤砂蛇凪浜 2016-12-04 10 50 12 GUIに文字を入れて翻訳するのはどうやるんですか - HIROMARU (2021-01-09 11 38 30) 名前
https://w.atwiki.jp/vipisland2/pages/32.html
序盤の解説 初めてログインしたら ログインしたはいいが、何をしたらいいかわからない 初心者に向けてのアドバイス、助言 ①お金を銀行に預ける ②職業安定所に行って仕事に就く ③ようかんまんに弟子入りして趣味を会得(身につけよう) ④アイテムを使って上げたいパラメータを上げる ⑤初期のお金の貯め方 ①お金を銀行に預ける 金額表示は所持金と総資産 最初の手持ち金額(総資産)は50万円です 無くすと困ったことになるので銀行を見つけて 一般口座に所持金のほぼ全てを預金しましょう 必要金額をちょっとずつ引き出して使うなど大事に使いましょう 銀行のない街もあるので注意 街を移動したり、更新(リロード)すると一定確率で様々なイベントが発生します その中で所持金増減イベントが度々発生する(減少イベントの方が圧倒的に多い) 始めに銀行に預金しておけば所持金減少イベントを免れるわけです 普通口座と定期口座 初期は定期口座は利用する必要はありません 普通口座(0.1%)よりも利率は良い(0.5%)が、解約するには手数料は必要なため常用には適さない 定期口座の手数料は約利息5日分(2.5%)です 手持ちの50万円を普通口座に預けてください 出身地のMAP近辺を散策するついでに お店で買い物していくつかパラメーターを上げてみましょう MAP内の施設、個人商店を見て回る 施設 最初に必要となる施設は ジム・スクール・職業安定所・銀行・デパート 建設会社・温泉・病院・カードゲーム 説明については施設解説を参照してください 個人商店 VIP列島内でパラメーターを上げるためにはアイテムを買う必要がありますが そのほとんどは個人商店で買う事になります よって自分が主に活動する近辺のMAPに必要とする個人商店が多い程買い物に掛かる移動が楽になります 街間の移動時間は25秒と長いため乗り物を調達すると良い (乗り物を売っている店で買える) 乗り物を所持していると移動の際、自動的に使用される 種類によって短縮時間が異なる 使用回数は街を移動する度に1づつ減っていき、 0回になると他のアイテム同様消えます ②職業安定所に行きましょう 最初あなたの職業は「日払いバイト」 仕事をする度にわずかにお金が手に入りますが、非常に効率が悪い そこで職業安定所に行き、なりたい職業とその職業に必要なパラメーターを上げましょう 関連リンク:仕事・趣味>仕事 ようかんまんに弟子入りして趣味を会得(身につけよう) ようかんマン(紫色の施設)で趣味を身につけ実行したり、地酒やカクテル、タバコ(隠し効果で健康のパラが減少)でストレスを解消させましょう ここではカクテルが安価でカロリーもありパラメーターも上昇するためお勧め 転職はどうするの? 仕事を繰り返し経験値を溜めるとLvが上がり、基本給が一定値上昇 この上昇値は職業ごとに異なっているために、お金を稼ぎたい人は消費パワー、必要なパラメーターを考え、効率の良い職業に就きましょう 職業には上級職が用意されています 大抵の職業では初期職から上級職に進化するごとに効率が良くなっていく 転職の条件としては Lv15まで上げる事 上級職に必要なパラメーターを満たしている事 転職に必要なパラメーターはLv15まで育ったあと職業安定所に行くと見る事ができる ここで注意したいのが「分岐」 分岐とはある職業の上級職が2つ以上ある事を指す 例:「職業A」という初期職から派生する上級職に「A1」「A2」があると仮定 このA1・A2のどちらかしか選べないのですが、A1をLv15まで上げてしまうとA2という選択肢が消えてしまう もしLv15まで上げてしまった後にA2の方が良かったと思っても、初期職からやり直しをしなくてはいけません また、Lv15になっても上級職が出ない場合はそれ以上上級職が無い事を意味します ④アイテムを使って上げたいパラメータを上げる パラメータ、身体・頭脳パワーを効率良く上げたいんですが… パラメーターはアイテムを使用する事で上昇 パワーとパラメータの関係 身体パワー = 身体系パラメータ 頭脳パワー = 頭脳系パラメータ 精神パラメータ = 身体・頭脳パワー両方に関係 VIP列島には数多くのアイテムが存在する どの様な業種(アイテムのカテゴリ)が存在するかは問屋を見ればわかる お店(自分の家)を持っていないと何も表示されません 初期に適したアイテム 文具:頭脳系パラメータ サプリメント:身体系パラメータ お花:精神系パラメータ もちろん自分の目指す職業ごとに必要なパラメータが違いますので、頭脳・身体パワー、お金と相談しながら条件に合うアイテムを探してみてください 施設の「ジム」をこまめに利用しよう 1日1回学校で授業を受けるのも忘れないでください どこにどんなお店があるのかわかりません… 列島には数多くのMAPが存在し、数多くのお店が存在します 実際に店をひとつひとつ覗いて回るしかありません 1つテクニックとして、建設会社を利用する方法があります 家を建築したい時に使う建築会社ですが、ここでは各MAPの現在の状態を見る事が出来ます それぞれのお店には店主が店にマウスをあわせた時に表示されるコメントに業種を表示している事が多い 例:「○○のサプリのお店」 どの街にどんなお店があるか覚えておきましょう 建設会社から現在の状態を覗く事によって、コメントを設定されているお店ならば、移動せずに発見する事が出来ます 建築会社から実際にお店に入る事は出来ませんので実際にそこまで移動しましょう 他タウンゲームにある役所から直接お店に行く仕組みはない ⑤初期のお金の貯め方 列島には他の住人からお金を貰う手段はない 初期にお金を貯める一番の基本は仕事とカードゲーム 職業安定所に記載されている初期職でも、給料・ボーナスを合わせれば 15分程度で数十万以上貰える職業がちゃんとあります 新規参加すぐの初期状態ではキャラクタの職業は「日払いバイト」 ボーナスが無い、職業LvUPによる昇給も100円といいとこなし なるべく初期のうちは最初の50万円を元手に、 サプリメント お花 文具など 安価でも短期間で使え、時間あたりのパラメータ上昇が高いアイテムをうまく使い ボーナスが出る職業に転職、その後は仕事→カロリー摂取という流れを繰り返すとお金を安定して稼げるようになる お店を持てるようにまで貯金ができるお金が得られるようになれば当面お金に困る事はなくなるはず 最初のうちはカードゲームを利用するのも重要な手段ですが、カードゲームで大きな勝負に出た結果として借金を抱え、列島自体を続かなくなってしまう人もいるようです(比較的楽に建て直し可能なレベル) 借金返済方法 自分の総資産や給料を考え、小銭を稼ぐつもりでカードゲームを併用しましょう 上へ
https://w.atwiki.jp/arcadiasaga/pages/541.html
クエスト>チュートリアル に戻る クエストタイトル 開始、報告NPC 報酬 内容 備考 第一章:ポルトゥーンの夜明け マーディン 始:キュレーネ報:マーディン 無し ポルトゥーン周辺の簡単な説明やプレイヤーがこの島に着いてからのいきさつ 第一章:ポルトゥーンの夜明け キュレーネの頼み事 始:マーディン報:キュレーネ ニュービージャケット・カジュアルクロースのどちらかニュービートラウザ・ニュービースコート・カジュアルパンツ・カジュアルスカートから1つフィールドダガー 初期クエストからの続き話を聞くだけで進む クラスと性別で報酬が変わるが、共通して胴と腰の防具、短剣が貰えるチュートリアルクエストをスキップしても装備品は手に入る。ここで貰える武器防具は店に売っても0G。(修理費はかかる) 第一章:ポルトゥーンの夜明け リトルラット駆除 始:キュレーネ報:キュレーネ 経験値 500ニュービーシューズ(ウォーリア・テイマー)カジュアルシューズ(ウィザード・バード) リトルラット(Lv1)×3匹を倒す 前クエでもらえた防具と同じく、ここで貰える靴も店に売っても0G。 第一章:ポルトゥーンの夜明け ジュアーブの依頼 始:マーディン報:アジャ ナストリタン行政区の中央広場にいるアジャに会って登録証を見せる チュートリアル終了 ナストリタンの南か東か西のいずれかの地区へ飛ばされそのまま第二章:首都ナストリタンへにクエ変更。 職業のススメ 始:アシス報:アシス 1500G(ウォーリア)700G+カナリーワンド(ウィザード)500G+チープケージ(テイマー)700G+エティマシアリュート(バード) アシスから一通りの説明を受ける「!」マークにいるリトルゴブリン(Lv5)×1を倒すその後、アシスに話しかけ、職別クイズ5問 クラス毎に報酬とクイズの内容が異なる。クイズ内容は固定で間違っても何度も再挑戦可能。アシスとタントの話をしっかり聞いていれば問題なくクリアできる。 むしのえさやり 始:バーミンガム報:バーミンガム フルーツペットフード バーミンガムからえさやりの手伝いを頼まれる。トムソンに話しかけ、フルーツペットフードを貰い、甲虫のバブルスにあげる。「!」が常に出るのでそれを追いかければすんなり終わる。 スタートしてキュレーネに話しかけ、手伝って欲しいに「はい」と答えると出現。バーミンガムがクエスト斡旋所代わりになっており、クエストポイントを1消費することに注意。また、1回受けると消滅する。 かめのえさやり 始:バーミンガム報:バーミンガム ベジタブルペットフード えさやりクエの1つ。ベジタブルペットフードをカメのタルトにあげる。 同上。 根人のえさやり 始:バーミンガム報:バーミンガム キノコペットフード えさやりクエの1つ。キノコペットフードを根人のラルにあげる。 同上。 ひつじのえさやり 始:バーミンガム報:バーミンガム コーンペットフード えさやりクエの1つ。コーンペットフードをひつじのチャッピーにあげる。 同上。 ねこのえさやり 始:バーミンガム報:バーミンガム ミートペットフード えさやりクエの1つ。他のえさやりクエと違い、3匹のねこにあげることになる。ミートペットフードをネロリ→プーチン→ケルベロスの順に。 同上。
https://w.atwiki.jp/fankillfanclub/pages/12.html
インストール後 ゲーム起動後にデータのDLが始まります。 データDL中に画面上部にて「姫石ゲッター」が行われています。 姫石ゲッター 画面をタップしていくだけのゲームです。 討伐数777で姫石6個が報酬となります。 チュートリアル戦闘 画面の指示に従って進めていくだけです。 戦闘終了後、一度目のガチャとなります。 初回ガチャ 6種類の☆3ユニットの中からランダムとなります。 ユニット 評価 推奨姫型詳細 パラシュ ◎ 守or匠 ロンギヌス ◎ 守or匠 マサムネ ○ 匠 レーヴァテイン ○ 匠 アルテミス △ 守or匠 フライクーゲル × 守or匠 ※姫型は残念なタイプでも統合用素材として使うのでこだわる必要はあまりありません。 このガチャはインストール時点でユニットが確定しでおり、後述する方法(高速リセマラ)では変化しません。 ただし、各ユニット毎に付与される姫型はランダムで変わります。 初回ガチャのユニットを変更する場合は一度、アンインストールする必要があります。 初回ガチャユニット 初回ガチャで手に入る☆3ユニットはマナガチャと呼ばれる無料(非課金)ガチャで手に入るユニットとなります。 ですので、無課金ユーザーでも複数体手に入れることができ、限界突破をすることが可能となります。 中でもパラシュ・ロンギヌス・マサムネ・レーヴァテインは優秀なスペックを持っているので限界突破を最大まですれば強力なユニットとなります。 Next
https://w.atwiki.jp/netacontestinfo/pages/19.html
1998年結成 左 福田充徳 右 徳井義実 プロフィール - 吉本興業 M-1成績 大会名 成績 備考 M-1グランプリ2001 8位 M-1グランプリ2002 準決勝敗退 M-1グランプリ2003 準決勝敗退 M-1グランプリ2004 準決勝敗退 M-1グランプリ2005 5位 M-1グランプリ2006 優勝 その他大会成績 大会名 成績 備考 第21回ABCお笑い新人グランプリ 最優秀新人賞 第33回NHK上方漫才コンテスト 優秀賞
https://w.atwiki.jp/chiffon-nico/pages/15.html
まず、首都から出て木を切ります。 次に、木を1本刈り取ります。 その後、作業台を作ります。 木の剣を作ります。 歩いている人を見つけたらおもむろに殴ります。 1.8になった楽しいサバイバルライフを! とまあさておき、まずは道なりに進み白い部屋を目指してください。 役に立つことがたくさん書いてあるはずです。